package com.CST.mapper.cst.cb;

import com.CST.dto.cb.DateDTO;
import com.CST.entity.cb.BaseSalary;
import com.CST.vo.cb.ReportBaseSalaryVO;
import com.CST.vo.cb.ReportSalaryDetailVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author ly
 * @since 2022-04-20
 */
@Repository
public interface BaseSalaryMapper extends BaseMapper<BaseSalary> {

    /**
     * 查询人员经费明细
     * @param dateDTO
     */
    List<BaseSalary> listBaseSalaryByDate(DateDTO dateDTO);


    List<BaseSalary> listFirstSalaryByDate(DateDTO dateDTO);


    /**
     * 插入人员经费明细
     */
    void insertBaseSalary(@Param("list") List<BaseSalary> list, @Param("year") Integer year);

    void insertBaseSalaryDEL(@Param("list") List<BaseSalary> list, @Param("year") Integer year);
    /**
     * 获取人员经费1级详情
     * 需要传入父级科室
     * 按照账套归类显示
     * @param dateDTO
     * @param pDeptCode
     * @return
     */
    List<ReportBaseSalaryVO> listSalaryWithAccByPDeptCode(DateDTO dateDTO, String pDeptCode);

    /**
     * 根据父级科室+子科室获取人员经费明细
     * 点击人员经费1级明细的子科室生效
     * @param dateDTO
     * @param pDeptCode
     * @param deptCode
     * @return
     */
    List<BaseSalary> listSalaryByPDeptCodeAndDeptCode(@Param("dateDTO") DateDTO dateDTO, @Param("pDeptCode") String pDeptCode, @Param("deptCode") String deptCode);

    /**
     * 人员经费明细
     * 点击人员经费1级明细的账套生效
     * @param dateDTO
     * @param pDeptCode
     * @param deptCode
     * @param accId
     * @return
     */
    List<ReportBaseSalaryVO> listSalaryByDeptAndAccId(@Param("dateDTO") DateDTO dateDTO, @Param("pDeptCode") String pDeptCode, @Param("deptCode") String deptCode, @Param("accId") String accId);

    /**
     * 人员经费二级明细
     * 传入时间+父级科室+子科室
     * 根据成本项目分组计算每个员工，各个成本项目的人员经费明细
     * @param dateDTO
     * @param pDeptCode
     * @param deptCode
     * @return
     */
    List<ReportSalaryDetailVO> listSalaryDetailByDateAndPDeptAndDept(@Param("dateDTO") DateDTO dateDTO, @Param("pDeptCode") String pDeptCode, @Param("deptCode") String deptCode);


    /**
     * 根据年月删除
     */
    void deleteByYearAndMonth(@Param("year") Integer year, @Param("month") Integer month);
    void deleteDELByYearAndMonth(@Param("year") Integer year, @Param("month") Integer month);

}
